package com.cgy.springboot.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
public class FileController {

    // 文件上传路径（实际生产环境应配置在配置文件中）
    private static final String UPLOAD_PATH = "C:/Users/llk/Desktop/wxapp-spring-boot/SpringBoot/src/main/java/com/cgy/springboot/images/";
    
    // 基础URL（与前端期望的路径格式保持一致）数据库路径
    private static final String BASE_URL = "http://localhost:8080/images/";
    
    // 允许的图片格式
    private static final String[] ALLOWED_IMAGE_TYPES = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"};

    @PostMapping("/images")
    public Map<String, Object> uploadImage(@RequestParam("file") MultipartFile file) {
        Map<String, Object> result = new HashMap<>();
        
        // 检查文件是否为空
        if (file.isEmpty()) {
            result.put("success", false);
            result.put("message", "文件为空，请选择文件上传");
            return result;
        }
        
        // 获取文件名和扩展名
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
        
        // 验证文件类型
        boolean isAllowedType = false;
        for (String allowedType : ALLOWED_IMAGE_TYPES) {
            if (allowedType.equals(suffix)) {
                isAllowedType = true;
                break;
            }
        }
        
        if (!isAllowedType) {
            result.put("success", false);
            result.put("message", "不支持的文件类型，请上传图片文件（jpg、jpeg、png、gif、bmp、webp）");
            return result;
        }
        
        // 确保上传目录存在
        File uploadDir = new File(UPLOAD_PATH);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }
        
        // 生成文件名（使用UUID避免文件名冲突）
        String newFilename = UUID.randomUUID().toString() + suffix;
        
        // 创建文件对象
        File dest = new File(UPLOAD_PATH + newFilename);
        
        // 保存文件
        try {
            file.transferTo(dest);
            // 返回可访问的图片URL和成功信息
            String imageUrl = BASE_URL + newFilename;
            result.put("success", true);
            result.put("message", "文件上传成功");
            result.put("url", imageUrl);
            result.put("filename", newFilename);
            return result;
        } catch (IOException e) {
            e.printStackTrace();
            result.put("success", false);
            result.put("message", "文件上传失败：" + e.getMessage());
            return result;
        }
    }
}